package com.zx.system.block.service;

import com.zx.core.wrapper.ListWrapper;
import com.zx.core.wrapper.ObjectWrapper;
import com.zx.core.wrapper.PageWrapper;
import com.zx.core.wrapper.ResponseWrapper;
import com.zx.feign.client.dto.DictDataDTO;
import com.zx.system.block.model.SysDictData;
import com.zx.system.block.param.DictDataParam;
import com.zx.system.block.vo.SysDictDataVO;

import java.util.List;
import java.util.Map;

/**
 * <p>
 * description: 业务层字典数据服务接口 <br>
 * create: 2025-11-18
 * </p>
 *
 * @author zhou xun
 */
public interface ISysDictDataService {

    /**
     * 查询字典数据列表
     *
     * @param dictDataParam 字典数据参数
     * @return {@link ListWrapper<SysDictData>}
     * @author zhou xun
     * @since 2025-11-18
     */
    ListWrapper<SysDictData> selectDictDataList(DictDataParam dictDataParam);

    /**
     * 分页查询字典数据列表
     *
     * @param dictDataParam 字典数据参数
     * @return {@link PageWrapper<SysDictData>}
     * @author zhou xun
     * @since 2025-11-18
     */
    PageWrapper<SysDictData> selectDictDataListByPage(DictDataParam dictDataParam);

    /**
     * 查询字典数据列表VO
     *
     * @param dictDataParam 字典数据参数
     * @return {@link ListWrapper<SysDictDataVO>}
     * @author zhou xun
     * @since 2025-11-18
     */
    ListWrapper<SysDictDataVO> selectDictDataVOList(DictDataParam dictDataParam);

    /**
     * 分页查询字典数据列表VO
     *
     * @param dictDataParam 字典数据参数
     * @return {@link PageWrapper<SysDictDataVO>}
     * @author zhou xun
     * @since 2025-11-18
     */
    PageWrapper<SysDictDataVO> selectDictDataVOListByPage(DictDataParam dictDataParam);

    /**
     * 新增字典数据
     *
     * @param dictDataParam 字典数据参数
     * @return {@link ResponseWrapper}
     * @author zhou xun
     * @since 2025-11-18
     */
    ResponseWrapper addDictData(DictDataParam dictDataParam);

    /**
     * 编辑字典数据
     *
     * @param dictDataParam 字典数据参数
     * @return {@link ResponseWrapper}
     * @author zhou xun
     * @since 2025-11-18
     */
    ResponseWrapper editDictData(DictDataParam dictDataParam);

    /**
     * 编辑字典数据状态
     *
     * @param id     字典数据Id
     * @param status 字典数据状态 0停用 1 启用
     * @return {@link ResponseWrapper}
     * @author zhou xun
     * @since 2025-11-18
     */
    ResponseWrapper editDictDataStatus(String id, Integer status);

    /**
     * 删除字典数据
     *
     * @param dictDataId 字典数据Id
     * @return {@link ResponseWrapper}
     * @author zhou xun
     * @since 2025-11-18
     */
    ResponseWrapper deleteDictData(String dictDataId);


    /**
     * 根据字典类型查询启用的字典数据列表VO
     *
     * @param dictType 字典类型
     * @return {@link ListWrapper<SysDictDataVO>} 字典数据列表VO
     * @author zhou xun
     * @since 2025-11-19
     */
    ListWrapper<SysDictDataVO> selectEnableDictDataVOListByType(String dictType);

    /**
     * 批量根据字典类型查询启用的字典数据列表VO
     *
     * @param dictTypes 字典类型列表
     * @return {@link ObjectWrapper<Map<String, List<SysDictDataVO>>>} 字典类型和字典数据列表VO的映射包装
     * @author zhou xun
     * @since 2025-11-19
     */
    ObjectWrapper<Map<String, List<SysDictDataVO>>> selectEnableDictDataVOListByTypes(List<String> dictTypes);

    /**
     * 批量根据字典类型查询启用的字典数据列表DTO
     *
     * @param dictType 字典类型
     * @return {@link ListWrapper<DictDataDTO>}
     * @author zhou  xun
     * @since 2025-11-21
     */
    ListWrapper<DictDataDTO> selectEnableDictDataDTOListByType(String dictType);

    /**
     * 批量根据字典类型查询启用的字典数据列表DTO
     *
     * @param dictTypes 字典类型列表
     * @return {@link ObjectWrapper<Map<String, List<DictDataDTO>>>} 字典类型和字典数据列表DTO的映射包装
     * @author zhou xun
     * @since 2025-11-19
     */
    ObjectWrapper<Map<String, List<DictDataDTO>>> selectEnableDictDataDTOListByTypes(List<String> dictTypes);
}